package Day19;

import com.sun.org.apache.xml.internal.serialize.Serializer;

public class Day19_M {
    public static void main(String[] args) {
        //Serializer: ['siəriəlaizə] 串行器

        //泛型类型的擦除的缺点
        //影响了类型的转换 有可能产生类型转换错误ClassCastException
        //为了避免此情况 java提供了一种特性 在编译时能自行检查类型
        //类型通配符和上限通配符
        // <?> 无限制通配符 泛指所有类型 若直接泛型 会浪费空间 加大代码量
        //限制通配符
        // <? extends T> 上限限定符 extends 指定类型参数的上限 指定类型或子类类型作为实际参数类型
        //T表示具体类型 表示?可以泛型成T类型或是它的子类或是它的实现类 上线限定符只能读取数据 不能写入数据例如number.add(10);
        //例如 List<? extends Number> numbers; // 可以是 List<Integer>, List<Double>, List<Number> 等
        // <? super T> 下限限定符 T 同样是一个具体的类型或接口。它表明该通配符可以代表 T 类型本身及其所有超类型。
        // 这意味着任何 T 的父类型或 T 本身都可以作为实际类型参数传递给使用了下界通配符的泛型结构。
        // 下界通配符通常用于表示“消费者”场景，即方法只向容器中添加元素但不从中取出元素。
//    }public double calculateAverage(List<? extends Number> numbers) {
//    double sum = 0;
//    for (Number number : numbers) {
//        sum += number.doubleValue();
//    }
//    return numbers.isEmpty() ? 0 : sum / numbers.size();
//}
//
//// 使用示例
//List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
//double integerAvg = calculateAverage(integerList); // 合法，Integer 是 Number 的子类
//
//List<Double> doubleList = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);
//double doubleAvg = calculateAverage(doubleList); // 合法，Double 也是 Number 的子类
//
//}
//
//
//public void addIntegerToList(List<? super Integer> list, int value) {
//    list.add(Integer.valueOf(value));
//}
//
//// 使用示例
//List<Integer> integerList = new ArrayList<>();
//addIntegerToList(integerList, 10); // 合法，直接添加到 Integer 列表
//
//List<Number> numberList = new ArrayList<>();
//addIntegerToList(numberList, 20); // 合法，Integer 是 Number 的子类
//
//List<Object> objectList = new ArrayList<>();
//addIntegerToList(objectList, 30); // 合法，Object 是所有类型的超类型
    }}
